// LeetCode 主站 Problem Nr. 283: 移动零

/*
给定一个数组 numbers，编写一个函数将所有 0 移动到数组的末尾，同时保持非零元素的相对顺序。
请注意 ，必须在不复制数组的情况下原地对数组进行操作。

示例 1:
输入: numbers = [0,1,0,3,12]
输出: [1,3,12,0,0]
示例 2:
输入: numbers = [0]
输出: [0]

提示:
    1 <= numbers.length <= 104
    -231 <= numbers[i] <= 231 - 1

进阶：你能尽量减少完成的操作次数吗？

来源：力扣（LeetCode）
链接：https://leetcode-cn.com/problems/move-zeroes
著作权归领扣网络所有。商业转载请联系官方授权，非商业转载请注明出处。
*/

package main

func moveZeroes(numbers []int)  {
    method1(numbers)
}

func method1(numbers []int) {
	k := 0
	for _, v := range numbers {
		if v != 0 {
			numbers[k] = v
			k++
		}
	}

	for k < len(numbers) {
		numbers[k] = 0
		k++
	}
}

func method2(numbers []int) {
	left, right := 0, 0
	for right < len(numbers) {
		if numbers[right] != 0 {
			numbers[left], numbers[right] = numbers[right], numbers[left]
			left++
		}
		right++
	}
}